package gretha.GUI.utils;

import gretha.GUI.PartieCentrale;

import java.awt.Color;

import javax.swing.GroupLayout;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class LigneCreationMassif extends JPanel {

	private static final long serialVersionUID = -6913705576109634165L;

	public int nombreParcellesTotales = 1;
	private JLabel labelParcelle;
	private JLabel labelParcelle2;
	private JComboBox listeCohortes;
	private JLabel labelQuantite;
	private JTextField quantiteCohorte;
	private JLabel labelAnneePlantation;
	private JTextField anneePlantation;
	private JLabel labelCheckboxDegrade;
	private JCheckBox checkboxDegrade;
	private JLabel labelNombreParcelles;
	private JTextField textNombreParcelles;
	private String[] cohortes;

	private boolean coche;
	private int numeroParcelle1;
	private int nombreParcelles;
	private int numeroLigne;

	private JPanel parent;
	private GroupLayout groupeLayout;

	private GroupLayout.ParallelGroup horzGroupe;
	private GroupLayout.SequentialGroup vertGroupe;

	public LigneCreationMassif(String[] cohortes, JPanel parent,
			int numeroLigne, int nombreParcellesTotales) {
		this.parent = parent;
		coche = false;
		this.nombreParcellesTotales = nombreParcellesTotales;
		numeroParcelle1 = (nombreParcellesTotales + 1);
		nombreParcelles = 1;
		this.cohortes = cohortes;
		this.numeroLigne = numeroLigne;

		/*
		 * On créé les éléments de la ligne
		 */
		labelParcelle = new JLabel("Parcelle n°" + numeroParcelle1);
		labelParcelle2 = new JLabel("");
		listeCohortes = new JComboBox(cohortes);
		labelQuantite = new JLabel("Quantité : ");
		quantiteCohorte = new JTextField(10);
		labelAnneePlantation = new JLabel("Année de plantation : ");
		anneePlantation = new JTextField(4);
		labelCheckboxDegrade = new JLabel("Cohorte dégradée");
		checkboxDegrade = new JCheckBox();
		checkboxDegrade.setBackground(Color.white);
		checkboxDegrade.addActionListener(actionCohorteDegradee);

		/*
		 * On assigne les "names"
		 */
		listeCohortes.setName("listeCohorte");

		/*
		 * On met en page
		 */
		initialisationLayout();

		horzGroupe.addGroup(groupeLayout.createSequentialGroup()
				.addComponent(labelParcelle).addComponent(listeCohortes)
				.addComponent(labelQuantite).addComponent(quantiteCohorte)
				.addComponent(labelAnneePlantation)
				.addComponent(anneePlantation).addComponent(checkboxDegrade)
				.addComponent(labelCheckboxDegrade));
		vertGroupe.addGroup(groupeLayout.createParallelGroup()
				.addComponent(labelParcelle).addComponent(listeCohortes)
				.addComponent(labelQuantite).addComponent(quantiteCohorte)
				.addComponent(labelAnneePlantation)
				.addComponent(anneePlantation).addComponent(checkboxDegrade)
				.addComponent(labelCheckboxDegrade));

		groupeLayout.setHorizontalGroup(horzGroupe);
		groupeLayout.setVerticalGroup(vertGroupe);
	}

	private void initialisationLayout() {
		groupeLayout = new GroupLayout(this);
		this.setLayout(groupeLayout);

		groupeLayout.setAutoCreateContainerGaps(true);
		groupeLayout.setAutoCreateGaps(true);
		horzGroupe = groupeLayout.createParallelGroup();
		vertGroupe = groupeLayout.createSequentialGroup();

		this.setBackground(Color.white);
	}

	java.awt.event.ActionListener actionCohorteDegradee = new java.awt.event.ActionListener() {
		public void actionPerformed(java.awt.event.ActionEvent e) {
			if (!coche) {
				coche = true;

				// Recuperation des donnnées
				String quantiteTmp = quantiteCohorte.getText();
				String anneePlantationTmp = anneePlantation.getText();
				int cohorteSelectionneTmp = listeCohortes.getSelectedIndex();

				removeAll();

				labelParcelle = new JLabel("Parcelles n°" + numeroParcelle1);
				labelParcelle2 = new JLabel(" à "
						+ (numeroParcelle1 - 1 + nombreParcelles));

				listeCohortes = new JComboBox(cohortes);
				listeCohortes.setSelectedIndex(cohorteSelectionneTmp);

				labelQuantite = new JLabel("Quantité : ");
				quantiteCohorte = new JTextField(10);
				quantiteCohorte.setText(quantiteTmp);

				labelAnneePlantation = new JLabel("Année de plantation : ");
				anneePlantation = new JTextField(4);
				anneePlantation.setText(anneePlantationTmp);

				labelNombreParcelles = new JLabel("Nombre de parcelles : ");
				textNombreParcelles = new JTextField(4);
				textNombreParcelles.setText("1");
				textNombreParcelles
						.addActionListener(actionModificationNombreParcelles);

				labelCheckboxDegrade = new JLabel("Cohorte dégradée");
				checkboxDegrade = new JCheckBox();
				checkboxDegrade.setBackground(Color.white);
				checkboxDegrade.setSelected(true);
				checkboxDegrade.addActionListener(actionCohorteDegradee);

				/*
				 * On met en page
				 */
				initialisationLayout();

				horzGroupe.addGroup(groupeLayout.createSequentialGroup()
						.addComponent(labelParcelle)
						.addComponent(labelParcelle2)
						.addComponent(listeCohortes)
						.addComponent(labelQuantite)
						.addComponent(quantiteCohorte)
						.addComponent(labelAnneePlantation)
						.addComponent(anneePlantation)
						.addComponent(labelNombreParcelles)
						.addComponent(textNombreParcelles)
						.addComponent(checkboxDegrade)
						.addComponent(labelCheckboxDegrade));
				vertGroupe.addGroup(groupeLayout.createParallelGroup()
						.addComponent(labelParcelle)
						.addComponent(labelParcelle2)
						.addComponent(listeCohortes)
						.addComponent(labelQuantite)
						.addComponent(quantiteCohorte)
						.addComponent(labelAnneePlantation)
						.addComponent(anneePlantation)
						.addComponent(labelNombreParcelles)
						.addComponent(textNombreParcelles)
						.addComponent(checkboxDegrade)
						.addComponent(labelCheckboxDegrade));

				groupeLayout.setHorizontalGroup(horzGroupe);
				groupeLayout.setVerticalGroup(vertGroupe);

				/*
				 * On rafraichit l'affichage
				 */
				parent.revalidate();
				parent.repaint();
			} else {
				coche = false;

				// Recuperation des donnnées
				String quantiteTmp = quantiteCohorte.getText();
				String anneePlantationTmp = anneePlantation.getText();
				int cohorteSelectionneTmp = listeCohortes.getSelectedIndex();

				removeAll();

				labelParcelle = new JLabel("Parcelles n°" + numeroParcelle1);

				listeCohortes = new JComboBox(cohortes);
				listeCohortes.setSelectedIndex(cohorteSelectionneTmp);

				labelQuantite = new JLabel("Quantité : ");
				quantiteCohorte = new JTextField(10);
				quantiteCohorte.setText(quantiteTmp);

				labelAnneePlantation = new JLabel("Année de plantation : ");
				anneePlantation = new JTextField(4);
				anneePlantation.setText(anneePlantationTmp);

				labelCheckboxDegrade = new JLabel("Cohorte dégradée");
				checkboxDegrade = new JCheckBox();
				checkboxDegrade.setBackground(Color.white);
				checkboxDegrade.addActionListener(actionCohorteDegradee);

				/*
				 * On met en page
				 */
				initialisationLayout();

				horzGroupe.addGroup(groupeLayout.createSequentialGroup()
						.addComponent(labelParcelle)
						.addComponent(listeCohortes)
						.addComponent(labelQuantite)
						.addComponent(quantiteCohorte)
						.addComponent(labelAnneePlantation)
						.addComponent(anneePlantation)
						.addComponent(checkboxDegrade)
						.addComponent(labelCheckboxDegrade));
				vertGroupe.addGroup(groupeLayout.createParallelGroup()
						.addComponent(labelParcelle)
						.addComponent(listeCohortes)
						.addComponent(labelQuantite)
						.addComponent(quantiteCohorte)
						.addComponent(labelAnneePlantation)
						.addComponent(anneePlantation)
						.addComponent(checkboxDegrade)
						.addComponent(labelCheckboxDegrade));

				groupeLayout.setHorizontalGroup(horzGroupe);
				groupeLayout.setVerticalGroup(vertGroupe);

				/*
				 * On rafraichit l'affichage
				 */
				parent.revalidate();
				parent.repaint();
			}

		}
	};

	java.awt.event.ActionListener actionModificationNombreParcelles = new java.awt.event.ActionListener() {
		public void actionPerformed(java.awt.event.ActionEvent e) {
			try {
				JTextField tmp = (JTextField) e.getSource();
				int nombreParcellesActuelles = Integer.parseInt(tmp.getText());
				if (nombreParcellesActuelles != nombreParcelles) {
					nombreParcelles = nombreParcellesActuelles;
					labelParcelle2.setText(" à "
							+ (numeroParcelle1 - 1 + nombreParcelles));

					PartieCentrale.mettreAJourLaLigne(numeroLigne);

					parent.revalidate();
					parent.repaint();
				}
			} catch (Error er) {
				System.err.println(er.getMessage());
			}
		}
	};

	public void mettreAJour(int nombreParcelles) {
		numeroParcelle1 = nombreParcelles + 1;
		if (coche) {
			labelParcelle.setText("Parcelle n°" + numeroParcelle1);
		} else {
			labelParcelle.setText("Parcelles n°" + (nombreParcelles + 1));
			labelParcelle2.setText(" à "
					+ (numeroParcelle1 - 1 + nombreParcelles));
		}

	}

	public int getNumeroLigne() {
		return numeroLigne;
	}

	public int getNombreParcelles() {
		return nombreParcelles;
	}

	public int getCohorte() {
		return listeCohortes.getSelectedIndex();
	}

	public int getQuantite() {
		return Integer.parseInt(quantiteCohorte.getText());
	}

	public int getAge() {
		return Integer.parseInt(anneePlantation.getText());
	}

	public boolean getCoche() {
		return coche;
	}

	public int getParcelles() {
		return Integer.parseInt(textNombreParcelles.getText());
	}
}
